﻿<?php
/*
 *  tayphp的配置代码  
 * */
header("Content-type: text/html; charset=utf-8");
$tayphp = new tayphp();                 //核心代码初始化
class tayphp{
    /*
     * 构造函数
     * 一些常用变量的命名
     * 创建一些必要的目录文件夹
     * 跳转到指定位置的核心方法`
     * */
    public function __construct(){
//        $b = microtime(true);
        $app = substr('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'],0,strpos('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'],"/index.php"));
        define("__APP__", $app, false);               //网站的域名
        define("__URL__", $app . "/index.php", false);              //网站的域名 带入口文件
        unset($app);
        define("__ROOT__",substr(__DIR__,0,strlen(__DIR__)-7), false);                                //位置的根目录
//         if (empty($GLOBALS["ps"]["appname"])) {
//             $GLOBALS["ps"]["appname"] = "application";                           //默认项目文件是application
//         }
//         if (!file_exists("././" . $GLOBALS["ps"]["appname"])) {                   //检测是否存在项目文件
//             mkdir("././" . $GLOBALS["ps"]["appname"]);                            //新建一个项目文件,由于项目文件都是新建的,因此MVC文件夹都要新建
//             mkdir("././" . $GLOBALS["ps"]["appname"] . "/view");                  //新建一个视图文件夹
//             mkdir("././" . $GLOBALS["ps"]["appname"] . "/controller");            //新建一个控制器文件夹
//             $index = fopen("././" . $GLOBALS["ps"]["appname"] . "/controller/indexController.class.php", "w");           //新建一个默认控制器(indexController.class.php)
//             $content = "<?php
// /*
//  * 控制器的命名:名称Controller.class.php  与常规的php类文件没有差异
//  * 控制器最好用一个析构函数(用于释放资源)
//  * 必须继承Controller类
//  * */
// require_once __ROOT__.\"/tayphp/Controller.class.php\";
// class indexController extends Controller{
//     public function index(){
//         echo \"<br/><h1 style='font-size: 50px;margin-left: 20px;'>欢迎使用tayphp!\(^o^)/</h1><h1 style='margin-left: 20px;'>具体使用请查看文档!<a href='/tayphp/tayphp框架使用文档.docx'>下载文档</a></h1>\";
//     }
//     //析构函数不用写任何内容也是可以的
//     public function __destruct(){}
// }";
//             fwrite($index, $content);               //向默认控制器写入默认内容(代码)
//             fclose($index);                         //关闭文件流
//             unset($content);                        //释放资源
//             mkdir("././" . $GLOBALS["ps"]["appname"] . "/model");          //新建一个模型文件夹
//         }
        define("__VIEW__",__APP__."/".$GLOBALS["ps"]["appname"]."/view",false);       //项目文件的位置
        /*
         * 判断请求类型
         * */
        // strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
        // isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])

        /*
         * 判断是否本地域名请求
         * */
        if(isset($_SERVER['HTTP_HOST']) && strpos(__APP__,$_SERVER['HTTP_HOST']) >= 1){
            define("IS_LOCAL",true,false);
        } else{
            define("IS_LOCAL",false,false);
        }
        /*
         * 判断终端类型  pc   mobile
         * */
        $agent = $this->agent();
        if($agent == "pc"){         //pc终端
            define("IS_PC",true,false);
            define("IS_MOBILE",false,false);
        } else{                     //mobile终端(包括微信)
            define("IS_MOBILE",true,false);
            define("IS_PC",false,false);
        }
        unset($agent);          //释放无用资源
        if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) || IS_MOBILE){
            define("IS_AJAX",true,false);
            define("IS_GET",false,false);
            define("IS_POST",false,false);
        } else if($_SERVER['REQUEST_METHOD'] == 'GET'){
            define("IS_GET",true,false);
            define("IS_AJAX",false,false);
            define("IS_POST",false,false);
        } else if(($_SERVER['REQUEST_METHOD'] == 'POST')){
            define("IS_POST",true,false);
            define("IS_GET",false,false);
            define("IS_AJAX",false,false);
        }
        /*
        * 分析域名,跳转到指定的位置
        * 域名/index.php/控制器/方法?k1=v1&......
        * */
        $path_info = substr($_SERVER['PHP_SELF'],strpos($_SERVER['PHP_SELF'],"/index.php")+11);        //仅仅留下控制器名称和方法名称
        $arr = array();
        if (!empty($path_info)) {
            $arr = explode("/", $path_info);
            if(empty($arr[0])) {
                $arr[0] = "index";
            }
            if(!isset($arr[1]) || empty($arr[1])) {
                $arr[1] = "index";
            }
        } else {
            $arr[0] = "index";
            $arr[1] = "index";
        }
        unset($path_info);              //释放path_info资源
        $arr[0][0] = strtolower($arr[0][0]);
        $arr[0] = $arr[0]."Controller";
        if (file_exists(__ROOT__ ."/" . $GLOBALS["ps"]["appname"] . "/controller/" . $arr[0] . ".class.php")) {
            require_once(__ROOT__ ."/" . $GLOBALS["ps"]["appname"] . "/controller/" . $arr[0] . ".class.php");
            $obj = new $arr[0]();
            if (method_exists($obj, $arr[1])) {
                if (strtolower($arr[0]) != strtolower($arr[1])) {      //防止同名情况构造函数的多次调用
                    $obj->$arr[1]();
                }
            } else {
                echo "<br/><h1 style='font-size: 50px;margin-left: 20px;'>(╯﹏╰)</h1><h1 style='margin-left: 20px;'>无法加载方法!</h1>";
            }
            unset($obj);
        } else {
            echo "<br/><h1 style='font-size: 50px;margin-left: 20px;'>(╯﹏╰)</h1><h1 style='margin-left: 20px;'>无法加载控制器!</h1>";
        }
        unset($arr);            //释放$arr资源
//        echo "<h2>所用时间:".round(microtime(true)-$b,3)."</h2>";
    }
    /*
     * 判断终端类型  pc   mobile
     * */
    private function agent(){
        $agent = $_SERVER['HTTP_USER_AGENT'];
        $iphone = strstr(strtolower($agent), 'mobile'); //苹果手机检测
        $android = strstr(strtolower($agent), 'android'); //安卓手机检测
        $windowsPhone = strstr(strtolower($agent), 'phone'); //windows手机检测
        $ipad = strstr(strtolower($agent), 'ipad');       //判断是否ipad
        $androidTablet = false;
        if(strstr(strtolower($agent), 'android') ){     //判断安卓平板
            if(!strstr(strtolower($agent), 'mobile')){
                $androidTablet = true;
            }
        }
        if($androidTablet || $ipad){
            return  'tablet';
        } else if($iphone && !$ipad || $android && !$androidTablet || $windowsPhone){
            return  'mobile';
        } else{
            return  "pc";
        }
    }
}
unset($tayphp);
/*
* 数据库的连接   使用大D方式进行连接
* */
function D(){
    require_once __ROOT__ . "/tayphp/DB.class.php";
    return new DB();
}

/*
* 上传文件的对象的初始化  使用大U方法进行初始化
* 返回上传文件专用的对象
* */
function U($maxSize=2097152,$exts=array(),$savePath="uploads",$is_http_post=true,$is_uniqid=false,$is_date=true,$is_true_img=false){
    require_once __ROOT__."/tayphp/Upload.class.php";       //引入上传文件核心类
    $upload = new upload($maxSize,$exts,$savePath,$is_http_post,$is_uniqid,$is_date,$is_date);
//    $upload->setIsDate(true);           //设置日期子目录
//    $upload->setHttpPost(true);         //传送方式必须是http post方式
    return $upload;
}

/*
* Debug的开始  使用大B方法
* 返回Debug专用的对象
* */
function B(){
    require_once __ROOT__."/tayphp/Debug.class.php";
    return new Debug();
}